package com.i2silly.wxbot.utils;

import com.alibaba.fastjson.JSON;
import com.i2silly.wxbot.pojo.MessageResp;
import com.i2silly.wxbot.pojo.ReceiverDTO;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: wx-bot
 * @description：
 * @author: i2silly
 * @date: 2020年11月22日 14:30:27
 */
public class MessageUtil {

    public static String FAIL = "fail";

    public static String SUCCESS = "success";

    public static String respSuccess(Object data) {
        MessageResp resp = new MessageResp();
        resp.setData(data);
        resp.setMessage(SUCCESS);
        resp.setStatus("1");
        return JSON.toJSONString(resp);
    }

    public static String respFail(String message) {
        MessageResp resp = new MessageResp();
        resp.setData("");
        resp.setMessage(message);
        resp.setStatus("-1");
        return JSON.toJSONString(resp);
    }

    public static String respFail(MessageResp resp) {
        String message = FAIL;
        if (null != resp && PubUtils.isNotEmpty(resp.getMessage())) {
            message = resp.getMessage();
        }
        return respFail(message);
    }

    public static String respSuccess(MessageResp resp) {
        if (resp == null) {
            return respFail(FAIL);
        }
        resp.setStatus("1");
        if (PubUtils.isEmpty(resp.getMessage())){
            resp.setMessage(SUCCESS);
        }
        return JSON.toJSONString(resp);
    }

    public static String resp(MessageResp resp) {
        if (null == resp) {
            resp = new MessageResp();
            resp.setMessage("");
            resp.setData("");
            resp.setStatus("0");
        }
        return JSON.toJSONString(resp);
    }

    public static Map<String, Object> bean2Map(Object obj) {
        Method[] methods=obj.getClass().getMethods();
        Map<String,Object> map = new HashMap<>();
        try {
            for(Method method: methods){

                String methodName=method.getName();
                //反射获取属性与属性值的方法很多，以下是其一；也可以直接获得属性，不过获取的时候需要用过设置属性私有可见
                if (methodName.contains("get")){
                    //invoke 执行get方法获取属性值
                    Object value = method.invoke(obj);
                    if (value == null) {
                        continue;
                    }
                    //根据setXXXX 通过以下算法取得属性名称
                    String key = methodName.substring( methodName.indexOf("get") + 3);
                    Object temp = key.substring(0,1).toLowerCase();
                    key = key.substring(1);
                    //最终得到属性名称
                    key = temp + key;
                    if ("class".equals(key)) {
                        continue;
                    }
                    map.put(key,value);
                }
            }
            return map;
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        String preg = "^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$";
        String time = "0001-02-02";
        System.out.println(time.matches(preg));

        /*String str ="-0.31051517";
        Double aDouble = Double.valueOf(str);
        System.out.println(aDouble);
        BigDecimal b = new BigDecimal(aDouble);
        double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println(f1);*/
    }
}
